#ifndef __BSP_CAN_CORE_H
#define __BSP_CAN_CORE_H

#include "string.h"
#include "main.h"
#include "can.h"

// 包含所有子模块头文件
#include "bsp_can_motor.h"

// 初始化函数
uint8_t BSP_CAN_Init(CAN_HandleTypeDef *hcan);

// 主处理函数（在main循环中调用）
void BSP_CAN_Loop(CAN_HandleTypeDef *hcan);

// 配置
#define CAN_TX_QUEUE_SIZE 16
#define CAN_RX_QUEUE_SIZE 32
#define CAN_MAX_FILTERS 14

// CAN消息结构
typedef struct
{
    uint16_t id;
    uint8_t data[8];
    uint8_t length;
    uint32_t timestamp;
} bsp_can_msg_t;

// 核心函数
uint8_t bsp_can_core_init(CAN_HandleTypeDef *hcan);
void bsp_can_core_deinit(void);

// 前向声明（解决循环依赖）
uint8_t bsp_can_motor_init(void);
void bsp_can_motor_process(void);
// 过滤器配置
//uint8_t bsp_can_add_filter(uint16_t id, uint16_t mask);

uint8_t bsp_can_set_filter(CAN_HandleTypeDef *hcan_ptr, uint16_t id, uint16_t mask);



// 消息发送
uint8_t bsp_can_send(uint16_t id, const uint8_t *data, uint8_t len);

// 消息接收
uint8_t bsp_can_receive(bsp_can_msg_t *msg);
uint8_t bsp_can_available(void);
void bsp_can_clear_rx_queue(void);

// 处理函数
void bsp_can_core_process(CAN_HandleTypeDef *hcan_ptr);

// 中断回调
void bsp_can_rx_callback(CAN_HandleTypeDef *hcan_ptr);


#endif